//: [Previous](@previous)

/*:
 ### LeetCode上第24号问题：Swap Nodes in Pairs
 ```
 给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
 示例: 
 给定 1->2->3->4, 你应该返回 2->1->4->3.
 说明:
 * 你的算法只能使用常数的额外空间。
 * 你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
 ```
 */

var link = SinglyLinkedList()
link.appendToTail(1)
link.appendToTail(2)
link.appendToTail(3)
link.appendToTail(4)

func Solution(_ head: ListNode?) -> ListNode? {
    let dummyHead = ListNode(0)
    dummyHead.next = head
    
    var temp = dummyHead
    
    while temp.next != nil && temp.next?.next != nil {
        let left = temp.next!
        let right = temp.next!.next!
        
        temp.next = right
        left.next = right.next
        right.next = left
        
        temp = left
    }
    
    return dummyHead.next
}

print(link)
link.head = Solution(link.head)
print(link)


//: [Next](@next)
